package controlador;

import java.awt.event.*;
import javax.swing.*;
import programa.Partida;
import excepciones.ErrorAlCargarArchivo;
import vistas.VistaCargarArchivo;

/*
 * Controlador encargado de la barra de menu.
 */
public class ControladorMenuSuperior {

	/*
	 * Cada clase es un ActionListener de una opci�n de los menues diferente.
	 */
	private class EscuchaNuevoJuego implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			String nombreJugador = null;
			if (Partida.getInstance().getJugador() != null) {
				nombreJugador = Partida.getInstance().getJugador().getNombre();
				Partida.getInstance().nuevaPartida(nombreJugador);
			} else {
				nombreJugador = Partida.getInstance().obtenerNombreUsuario();
				if (nombreJugador != null) {
					Partida.getInstance().actualizarVista(nombreJugador);
					Partida.getInstance().nuevaPartida(nombreJugador);
				}
			}
		}
	}

	private class EscuchaCargarDesdeArchivo implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			new VistaCargarArchivo();
		}
	}

	private class EscuchaGuardar implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			try {
				Partida.getInstance().guardarPartida();
			} catch (ErrorAlCargarArchivo e1) {
				e1.printStackTrace();
			} catch (Exception exception) {
				JOptionPane.showMessageDialog(Partida.getInstance()
						.getVentana(),
						"Debe iniciar una partida para poder guardar");
			}
		}
	}

	private class EscuchaVolverMenu implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			Partida.getInstance().irAlMenuPrincipal();
		}
	}

	private class EscuchaSalir implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			if (Partida.getInstance().confirmarSalida()) {
				System.exit(0);
			}

		}
	}

	private class EscuchaComoJugar implements ActionListener {
		private String mensaje = "Si es nuevo, cree un nuevo piloto...y a volar! El mundo lo necesita!\n"
				+ "Si ya es un piloto con experiencia, puede continuar desde su �ltima partida guardada ingresando su nombre\n\n"
				+ "Destruya las aeronaves enemigas, y derrote al gu�a de cada nivel para cumplir la misi�n\n"
				+ "Cuidado con los aviones civiles y helicopteros de la polic�a que puede encontrarse en el aire\n\n"
				+ "Puede ver su puntaje actual en la esquina superior izquierda\n"
				+ "La barra en la esquina inferior izquierda muestra su energ�a actual\n"
				+ "Debajo de la barra de energ�a se encuentra la cantidad de vidas (representada con un corazon)\n"
				+ "A la derecha se muestra la cantidad de munici�n de cada tipo y la potencia del ca��n laser";

		@Override
		public void actionPerformed(ActionEvent e) {
			JOptionPane.showMessageDialog(Partida.getInstance().getVentana(),
					mensaje, "Bienvenido a Algo42!",
					JOptionPane.INFORMATION_MESSAGE);
		}
	}

	private class EscuchaVerControles implements ActionListener {
		private String mensaje = "Controles:\n"
				+ "Utilize las flechas de direcci�n para moverse\n"
				+ "Barra espaciadora: Disparar ca��n laser\n"
				+ "Q: Disparar cohetes\n" + "W: Disparar torpedos simples\n"
				+ "E: Disparar torpedos rastreadores\n"
				+ "R: Disparar torpedos adaptables\n"
				+ "D: Dar vuelta el Algo42\n" + "P: Pausa\n\n";

		@Override
		public void actionPerformed(ActionEvent e) {
			JOptionPane.showMessageDialog(Partida.getInstance().getVentana(),
					mensaje, "Controles", JOptionPane.INFORMATION_MESSAGE);
		}
	}

	// private class EscuchaAcercaDe implements ActionListener {
	// @Override
	// public void actionPerformed(ActionEvent e) {
	// System.out.println("TO DO -- AcercaDe");
	// }
	// }

	public EscuchaNuevoJuego getEscuchaNuevoJuego() {
		return new EscuchaNuevoJuego();
	}

	public EscuchaCargarDesdeArchivo getEscuchaCargarDesdeArchivo() {
		return new EscuchaCargarDesdeArchivo();
	}

	public EscuchaGuardar getEscuchaGuardar() {
		return new EscuchaGuardar();
	}

	public EscuchaVolverMenu getEscuchaVolverMenu() {
		return new EscuchaVolverMenu();
	}

	public EscuchaSalir getEscuchaSalir() {
		return new EscuchaSalir();
	}

	public EscuchaComoJugar getEscuchaComoJugar() {
		return new EscuchaComoJugar();
	}

	public EscuchaVerControles getEscuchaVerControles() {
		return new EscuchaVerControles();
	}

	// public EscuchaAcercaDe getEscuchaAcercaDe() {
	// return new EscuchaAcercaDe();
	// }

}
